<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
	<TITLE></TITLE>
	<META NAME="GENERATOR" CONTENT="BrOffice.org 2.4  (Win32)">
	<META NAME="AUTHOR" CONTENT="Karina Kieling">
	<META NAME="CREATED" CONTENT="20081004;17545900">
	<META NAME="CHANGEDBY" CONTENT="Karina Kieling">
	<META NAME="CHANGED" CONTENT="20081101;22443887">
	<STYLE TYPE="text/css">
	<!--
		@page { margin: 2cm }
		P { margin-bottom: 0.21cm }
		P.western { so-language: pt-BR }
	-->
	</STYLE>
</HEAD>
<BODY LANG="pt-BR" DIR="LTR">
<P STYLE="margin-bottom: 0cm; line-height: 150%"></P>
<P STYLE="margin-bottom: 0cm; line-height: 150%"></P>
<P STYLE="margin-bottom: 0cm; line-height: 150%"><B>FORMAS DE
REPRESENTA&Ccedil;&Atilde;O</B></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Projetistas
de uma linguagem podem definir formas pr&oacute;prias de
representa&ccedil;&atilde;o de uma linguagem, baseado em suas
necessidades, mas existem alguns padr&otilde;es de representa&ccedil;&atilde;o
da <A HREF="gramatica.html">gram&aacute;tica </A>que facilitam o seu
entendimento para pessoas envolvidas ou n&atilde;o com o
desenvolvimento de <A HREF="compilador.html">compiladores</A> para a
linguagem, ou utilizadores da linguagem que queiram consultar a sua
sintaxe.</P>
<P CLASS="western"><BR><BR>
</P>
<P STYLE="margin-bottom: 0cm; line-height: 150%"><B>Nota&ccedil;&atilde;o
BNF</B></P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	A forma
de representa&ccedil;&atilde;o de <A HREF="glc_llc.html">GLCs</A>
mais difundida e utilizada &eacute; a nota&ccedil;&atilde;o BNF
(Backus Naur Form). Ela foi criada por John Backus para expressar a
gram&aacute;tica da linguagem ALGOL, e foi apresentada em 1959. Em
1963, Peter Naur nomeou a nota&ccedil;&atilde;o de Backus Normal
Form, e a simplificou para diminuir o conjunto de caracteres usados.
Mais tarde seu nome foi incorporado pela sua contribui&ccedil;&atilde;o,
representando o N em Backus Naur Form (BNF).</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	A nota&ccedil;&atilde;o
representa uma gram&aacute;tica da seguinte forma:</P>
<P CLASS="western" ALIGN=CENTER><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;soma&gt; ::= &lt;termo&gt; &ldquo;+&rdquo;
&lt;termo&gt;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;termo&gt; ::= &lt;n&uacute;mero&gt;
| &lt;identificador&gt;</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Onde
&lt;numero&gt; representa n&uacute;meros e &lt;identificador&gt;
indica identificadores ou vari&aacute;veis. Os n&atilde;o-terminais
s&atilde;o representados por seus nomes entre os sinais de menor e
maior, o s&iacute;mbolo de produ&ccedil;&atilde;o por ::=, e os
terminais por strings entre aspas, estas n&atilde;o fazem parte da
nota&ccedil;&atilde;o original, mas ajudam a separar os caracteres
que s&atilde;o utilizados na pr&oacute;pria nota&ccedil;&atilde;o
BNF, por isso s&atilde;o muito usadas, como um sinal de &ldquo;&lt;&rdquo;
(menor), por exemplo. O caractere | (barra vertical) separa
alternativas. 
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Como a
nota&ccedil;&atilde;o BNF pode representar gram&aacute;ticas livres
de contexto, ela pode representar a ela mesma, sua pr&oacute;pria
sintaxe:</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;sintaxe&gt; ::= &lt;regra&gt;
| &lt;regra&gt; &lt;sintaxe&gt;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;regra&gt; ::= &ldquo;&lt;&rdquo;
&lt;nome da regra&gt; &ldquo;&gt;&rdquo; &ldquo;::=&rdquo;
&lt;express&atilde;o&gt; &lt;separador&gt;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;express&atilde;o&gt; ::=
&lt;lista&gt; | &lt;lista&gt; &ldquo;|&rdquo; &lt;express&atilde;o&gt;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;lista&gt; ::= &lt;termo&gt; |
&lt;termo&gt; &ldquo;|&rdquo; &lt;lista&gt;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;termo&gt; ::= &lt;literal&gt;
| &ldquo;&lt;&rdquo; &lt;nome da regra&gt; &ldquo;&gt;&rdquo;</P>
<P CLASS="western" ALIGN=JUSTIFY>		&lt;literal&gt; ::= '&rdquo;'
&lt;texto&gt; '&rdquo;' | &ldquo;'&rdquo; &lt;texto&gt; &ldquo;'&rdquo;</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Como
&lt;separador&gt; geralmente &eacute; utilizado o caractere fim de
linha. A &uacute;ltima produ&ccedil;&atilde;o indica que um literal
pode estar entre aspas simples ou duplas. Apesar de elas n&atilde;o
estarem na BNF original, esta gram&aacute;tica ficaria muito confusa
sem o uso delas, principalmente nas defini&ccedil;&otilde;es dos
caracteres maior e menor, e o s&iacute;mbolo de produ&ccedil;&atilde;o.</P>
<P CLASS="western"><BR><BR>
</P>
<P STYLE="margin-bottom: 0cm; line-height: 150%"><B>Varia&ccedil;&otilde;es
de BNF</B></P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Existem
diversas varia&ccedil;&otilde;es de nota&ccedil;&atilde;o BNF que s&atilde;o
utilizadas em defini&ccedil;&otilde;es de diferentes linguagens. A
mais conhecida e mais utilizada &eacute; a EBNF (Extended Backus-Naur
Form). Ela &eacute; possui algumas extens&otilde;es para facilitar a
representa&ccedil;&atilde;o de gram&aacute;ticas, como repeti&ccedil;&otilde;es
e opcionais, ou, em algumas varia&ccedil;&otilde;es, o uso de
par&ecirc;nteses para melhorar o controle de preced&ecirc;ncia dos
operadores. Muitas vezes,  a EBNF n&atilde;o envolve os n&atilde;o-terminais
entre os sinais de menor e maior e utiliza o caractere ';'
(ponto-e-v&iacute;rgula) para separar as produ&ccedil;&otilde;es.</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	O
operador de repeti&ccedil;&atilde;o da EBNF &eacute; composto pelos
caracteres '{' (abre chaves) e '}' (fecha chaves). A parte envolvida
por eles pode ocorrer zero ou mais vezes. Exemplo:</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY>		soma ::= termo { &ldquo;+&rdquo;
termo } ;</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Esta
produ&ccedil;&atilde;o indica que soma &eacute; formada por um ou
mais termos separados pelo sinal de &ldquo;+&rdquo; (mais). 
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Outro
operador bastante comum &eacute; o de opcionalidade, indicado pelos
caracteres '[' (abre colchetes) e ']' (fecha colchetes). O que
estiver entre colchetes n&atilde;o &eacute; obrigat&oacute;rio
aparecer no texto. Exemplo:</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY>		termo ::= [ &ldquo;-&rdquo; ]
n&uacute;mero ;</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Esta
produ&ccedil;&atilde;o indica que um termo &eacute; formado por um
n&uacute;mero, precedido ou n&atilde;o do sinal de &ldquo;-&rdquo;
(menos).</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Essas
extens&otilde;es facilitam muito a representa&ccedil;&atilde;o de
gram&aacute;ticas. A gram&aacute;tica da EBNF poderia ser representar
ela mesma, assim como a BNF.</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Outras
varia&ccedil;&otilde;es da nota&ccedil;&atilde;o BNF que s&atilde;o
freq&uuml;entemente utilizadas s&atilde;o os sufixos '*' (asterisco)
e '+' (mais), indicando, respectivamente, repeti&ccedil;&otilde;es de
zero ou mais e repeti&ccedil;&atilde;o de um ou mais elementos. O uso
destes operadores em conjunto com o uso de par&ecirc;nteses para
agrupar os termos aumenta consideravelmente a flexibilidade na
representa&ccedil;&atilde;o de gram&aacute;ticas.</P>
<P CLASS="western" ALIGN=JUSTIFY STYLE="line-height: 150%">	Exemplo
de uma gram&aacute;tica de uma linguagem de express&otilde;es
matem&aacute;ticas que envolvem as quatro opera&ccedil;&otilde;es
aritm&eacute;ticas e agrupamento com par&ecirc;nteses:</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western">		&lt;express&atilde;o&gt; ::= &lt;termo&gt; (  (
&ldquo;+&rdquo; &lt;termo&gt; ) | ( &ldquo;-&rdquo; &lt;termo&gt; )
)*;</P>
<P CLASS="western">		&lt;termo&gt; ::= &lt;fator&gt; ( ( '*' &lt;fator&gt;
) | ( &ldquo;/&rdquo; &lt;fator&gt; ) )*;</P>
<P CLASS="western">		&lt;fator&gt; ::= &lt;numero&gt; 
</P>
<P CLASS="western">				|  &ldquo;(&ldquo; &lt;express&atilde;o&gt;
&ldquo;)&rdquo; 
</P>
<P CLASS="western">				| &ldquo;-&rdquo; &lt;fator&gt;;</P>
<P CLASS="western">		&lt;numero&gt; ::= &lt;d&iacute;gito&gt;+;</P>
<P CLASS="western">		&lt;d&iacute;gito&gt; ::= '0' | '1' | '2' | '3'
| '4' | '5' | '6' | '7' | '8' | '9';</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western"><BR><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><IMG SRC="formas%20de%20representa%C3%A7%C3%A3o%20GLC_html_m637a0871.gif" ALIGN=MIDDLE>
<A HREF="Indice.html">Voltar &Iacute;ndice</A></P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western" STYLE="margin-bottom: 0cm"><BR>
</P>
<P CLASS="western"><BR><BR>
</P>
</BODY>
</HTML>